/**
 * 初始化管理员账号脚本
 * 
 * 使用方法：
 * 1. 确保 MongoDB 已连接
 * 2. 执行命令：node scripts/init-admin-user.js
 */

const mongoose = require('mongoose');
const bcrypt = require('bcryptjs');
const config = require('../src/config/config');

// 连接数据库
mongoose.connect(config.mongoose.url, config.mongoose.options).then(() => {
  console.log('已连接到MongoDB');
  initAdmin()
    .then(() => {
      console.log('管理员账号初始化完成');
      process.exit(0);
    })
    .catch((error) => {
      console.error('初始化管理员账号失败:', error);
      process.exit(1);
    });
}).catch((error) => {
  console.error('连接MongoDB失败:', error);
  process.exit(1);
});

// 管理员模型
const adminSchema = mongoose.Schema(
  {
    username: {
      type: String,
      required: true,
      unique: true,
      trim: true,
    },
    password: {
      type: String,
      required: true,
      trim: true,
    },
    name: {
      type: String,
      required: true,
      trim: true,
    },
    role: {
      type: String,
      enum: ['超级管理员', '内容管理员', '用户管理员'],
      default: '超级管理员',
    },
    permissions: {
      type: [String],
      default: ['user_manage', 'content_manage', 'system_config'],
    },
    isActive: {
      type: Boolean,
      default: true,
    },
  },
  {
    timestamps: true,
  }
);

const Admin = mongoose.model('Admin', adminSchema, 'admin_users');

// 初始化管理员账号
async function initAdmin() {
  // 检查是否已存在管理员账号
  const adminCount = await Admin.countDocuments();
  if (adminCount > 0) {
    console.log('管理员账号已存在，跳过初始化');
    return;
  }

  // 创建默认管理员账号
  const defaultAdmin = {
    username: 'admin',
    password: await bcrypt.hash('admin123', 8),
    name: '系统管理员',
    role: '超级管理员',
    permissions: ['user_manage', 'content_manage', 'system_config'],
    isActive: true,
  };

  await Admin.create(defaultAdmin);
  console.log('已创建默认管理员账号:');
  console.log('用户名: admin');
  console.log('密码: admin123');
  console.log('请登录后立即修改默认密码!');
} 